/**
 * @(#)Usuario.java Jan 30, 2007
 *
 * Copyright (c) 2005-2010 Psiqueware S.A. de C.V. All Rights Reserved.
 * This software is the proprietary information Psiqueware S.A. de C.V.
 * Use is subject to license terms.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
 * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 *
 * <br/>Usuario : AngelElectrico
 * <br/>Creaci&oacute;n: Jan 30, 2007 - 3:11:33 PM
 * <br/>
 * <br/>
 * <br/><t5>Cambios :</t5>
 * <br/><b>Fecha | Autor  |  Cambios</b>
 * <ul>
 * <li>Jan 30, 2007 | <a href = "mailto:AngelElectrico@PsiqueWare.com">Angel El&eacute;ctrico</a> | Creaci&oacute;n del Objeto.</li>
 *
 * </ul>
 */

package com.psiqueware.alheli.id;

import com.psiqueware.alheli.basico.BaseObjectInterface;
import com.psiqueware.alheli.basico.Identificable;
import com.psiqueware.alheli.seguridad.UsuarioSeguridad;

import java.util.List;

/**
 * Usuario del sistema. Este objeto debe identificar cada persona logeado; dado que los
 * {@link Identificacion} para una sola persona pueden ser varios.
 * <br/>Paquete Original: com.psiqueware.basico.id.modelo
 * <br/>Nombre  Original: Usuario
 * <br/>Oprima para ver : <a href="Usuario.java.html"><i>C&oacute;digo Fuente</i> </a>
 *
 * @author <a href="mailto:AngelElectrico@PsiqueWare.com">Angel El&eacute;ctrico</a>
 * @version Revision: 1.1 Jan 30, 2007 3:11:33 PM
 */
public interface Usuario extends BaseObjectInterface, Identificable, UsuarioSeguridad
{

    /**
     * Devuelve el Identificacion de este Usuario.
     *
     * @return valor de 'login'.
     */
    String getIdentificacion();

    /**
     * Devuelve el Titulo visible en pantalla de este {@link Usuario}. Inicialmente es una cadena vacia. No se garantiza que sea unico.
     *
     * @return valor de 'titulo'.
     */
    String getTitulo();

    /**
     * Devuelve el Clave identificador de este {@link Usuario}.
     *
     * @return valor de 'clave'.
     */
    String getClave();

    /**
     * Devuelve el Identificador &uacute;nico del {@link Dominio} que permite tener 2 o mas {@link Usuario}s con una misma identificaci&oacute;n siempre que
     * pertenezcan a diferentes dominios.
     * <p/>
     * En caso de no nuecesitarse puede ser <code>null</code>.
     *
     * @return valor de 'idDominio'.
     */
    Long getIdDominio();

    /**
     * Devuelve la Lista de los {@link com.psiqueware.alheli.id.PerfilSocial} que es el listao de los {@link com.psiqueware.alheli.id.PerfilSocial} asociados a este {@link com.psiqueware.alheli.id.Usuario}.
     *
     * @return List(unmodifiable) de 'm_perfiles'.
     *
     * @see java.util.List
     */
    List<PerfilSocial> getPerfiles();

    /**
     * Devuelve una copia del listado <code>m_perfiles</code>, que es el listao de los {@link com.psiqueware.alheli.id.PerfilSocial} asociados a este {@link com.psiqueware.alheli.id.Usuario}.
     *
     * @return una nueva List&lt;PerfilSocial&gt;.
     */
    List<PerfilSocial> listPerfiles();

    /**
     * Nos dice si el {@link com.psiqueware.alheli.id.PerfilSocial} se encuentra contenido en la
     * lista.
     *
     * @param o {@link com.psiqueware.alheli.id.PerfilSocial} a buscar.
     *
     * @return <code>true</code> si lo encuentra; <code>false</code> en caso contrario.
     */
    boolean containsPerfilSocial(final PerfilSocial o);
}
